package be.ipl.pigolo.testUcc;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

import org.junit.Before;
import org.junit.Test;

import be.ipl.pigolo.domaine.Cochon;
import be.ipl.pigolo.domaine.Cochon.Couleur;
import be.ipl.pigolo.domaine.Cochon.Etat;
import be.ipl.pigolo.domaine.Fermier;
import be.ipl.pigolo.domaine.Partie;
import be.ipl.pigolo.domaine.PartieFermier;
import be.ipl.pigolo.usecases.GestionPartie;

public class TestPrendreCochon {

	private static GestionPartie gp;
	private Partie partie = new Partie("partie27", 5);
	private Fermier fermier = new Fermier("joueur7","azerty");
	private PartieFermier partieFermier;
	private Cochon cochon = new Cochon(1, Couleur.ROUGE, Etat.NON_RAMASSER);
	
	
	@Before
	public void setUp() throws Exception {
		try {
			Context jndi = new InitialContext();
			gp = (GestionPartie) jndi
					.lookup("ejb:PigoloEAR/PigoloEJB/GestionPartieImpl!be.ipl.pigolo.usecases.GestionPartie");
		} catch (NamingException e) {
			e.printStackTrace();
		}
	}

	@Test
	public void testPrendreCochonPartieVide() {
		assertFalse(this.gp.prendreCochon(3, "", "joueur7"));
	}

	@Test
	public void testPrendreCochonFermierVide() {
		this.gp.creerPartie(partie.getNom(), 30);
		assertFalse(this.gp.prendreCochon(1, partie.getNom(), ""));
	}

	@Test
	public void testPrendreCochonPartieNonEnDB() {
		Partie p = new Partie("partie28",5);
		assertFalse(this.gp.prendreCochon(1, p.getNom(), fermier.getNom()));
	}

	@Test
	public void testPrendreCochonFermierValide() {
		
		partieFermier = new PartieFermier(fermier);
		this.gp.inscrire(this.fermier.getNom(), this.fermier.getMotDePasse());
		this.gp.inscrire("joueur77", "azerty");
		this.gp.creerPartie(this.partie.getNom(), 5);
		this.gp.rejoindrePartie(this.partie.getNom(), this.fermier.getNom());
		this.gp.rejoindrePartie(this.partie.getNom(), "joueur77");
		this.gp.commencerPartie(this.partie.getNom());
		partie.initialiserCochons();
		partie.placerCochon(this.cochon);
		assertTrue((this.gp.prendreCochon(1, partie.getNom(), "joueur7")));
	}
	
}
